core: Add utility functions to convert a OstreeObjectType to/from a string
authorColin Walters <walters@verbum.org>
Thu, 15 Dec 2011 18:09:51 +0000 (13:09 -0500)
committerColin Walters <walters@verbum.org>
Thu, 15 Dec 2011 18:09:51 +0000 (13:09 -0500)
src/libostree/ostree-core.c
src/libostree/ostree-core.h

index b9e9347330e5fb3845c5452117eefb18e126e2d6..c70ca708f6000de41d93746f768b66a7fb23e960 100644 (file)
@@ -480,12 +480,53 @@ ostree_parse_metadata_file (GFile                       *file,
   return ret;
 }
 
+const char *
+ostree_object_type_to_string (OstreeObjectType objtype)
+{
+  switch (objtype)
+    {
+    case OSTREE_OBJECT_TYPE_RAW_FILE:
+      return "file";
+    case OSTREE_OBJECT_TYPE_ARCHIVED_FILE_CONTENT:
+      return "archive-content";
+    case OSTREE_OBJECT_TYPE_ARCHIVED_FILE_META:
+      return "archive-meta";
+    case OSTREE_OBJECT_TYPE_DIR_TREE:
+      return "dirtree";
+    case OSTREE_OBJECT_TYPE_DIR_META:
+      return "dirmeta";
+    case OSTREE_OBJECT_TYPE_COMMIT:
+      return "commit";
+    default:
+      g_assert_not_reached ();
+      return NULL;
+    }
+}
+
+OstreeObjectType
+ostree_object_type_from_string (const char *str)
+{
+  if (!strcmp (str, "file"))
+    return OSTREE_OBJECT_TYPE_RAW_FILE;
+  else if (!strcmp (str, "archive-content"))
+    return OSTREE_OBJECT_TYPE_ARCHIVED_FILE_CONTENT;
+  else if (!strcmp (str, "archive-meta"))
+    return OSTREE_OBJECT_TYPE_ARCHIVED_FILE_META;
+  else if (!strcmp (str, "dirtree"))
+    return OSTREE_OBJECT_TYPE_DIR_TREE;
+  else if (!strcmp (str, "dirmeta"))
+    return OSTREE_OBJECT_TYPE_DIR_META;
+  else if (!strcmp (str, "commit"))
+    return OSTREE_OBJECT_TYPE_COMMIT;
+  g_assert_not_reached ();
+  return 0;
+}
+
 char *
 ostree_get_relative_object_path (const char *checksum,
                                  OstreeObjectType type)
 {
   GString *path;
-  const char *type_string;
 
   g_assert (strlen (checksum) == 64);
 
@@ -494,27 +535,9 @@ ostree_get_relative_object_path (const char *checksum,
   g_string_append_len (path, checksum, 2);
   g_string_append_c (path, '/');
   g_string_append (path, checksum + 2);
-  switch (type)
-    {
-    case OSTREE_OBJECT_TYPE_RAW_FILE:
-      type_string = ".file";
-      break;
-    case OSTREE_OBJECT_TYPE_ARCHIVED_FILE:
-      type_string = ".archive";
-      break;
-    case OSTREE_OBJECT_TYPE_DIR_TREE:
-      type_string = ".dirtree";
-      break;
-    case OSTREE_OBJECT_TYPE_DIR_META:
-      type_string = ".dirmeta";
-      break;
-    case OSTREE_OBJECT_TYPE_COMMIT:
-      type_string = ".commit";
-      break;
-    default:
-      g_assert_not_reached ();
-    }
-  g_string_append (path, type_string);
+  g_string_append_c (path, '.');
+  g_string_append (path, ostree_object_type_to_string (type));
+
   return g_string_free (path, FALSE);
 }
 
index e18adbb977f15ab4b72bb2a4b285f3621c25a6cf..88513b2a2a98aae20c4b7b529e6936b0062fba1a 100644 (file)
@@ -85,11 +85,26 @@ typedef enum {
  */
 #define OSTREE_COMMIT_GVARIANT_FORMAT "(ua{sv}ssstss)"
 
+/* Archive file objects:
+ * u - Version
+ * u - uid
+ * u - gid
+ * u - mode
+ * u - rdev
+ * s - symlink target
+ * a(ayay) - xattrs
+ */
+#define OSTREE_ARCHIVED_FILE_VARIANT_FORMAT G_VARIANT_TYPE ("(uuuuusa(ayay))")
+
 gboolean ostree_validate_checksum_string (const char *sha256,
                                           GError    **error);
 
 void ostree_checksum_update_stat (GChecksum *checksum, guint32 uid, guint32 gid, guint32 mode);
 
+const char * ostree_object_type_to_string (OstreeObjectType objtype);
+
+OstreeObjectType ostree_object_type_from_string (const char *str);
+
 char *ostree_get_relative_object_path (const char        *checksum,
                                        OstreeObjectType   type);